LEVEL_VERSION(1)
SET_GENERATE_SPEED(700)
START_MONEY(ALL_PLAYERS,22500)
MAX_CREATURES(PLAYER0,15)
MAX_CREATURES(PLAYER1,15)
MAX_CREATURES(PLAYER3,50)
SET_GAME_RULE(ImpWorkExperience,200)

QUICK_INFORMATION(5,"Be Sure to Check out all Communitymade Maps on: https://keeperfx.net/workshop/browse")
QUICK_OBJECTIVE(1,"Be Fast Keeper,soon waves of Enemies will rain down and make their way to your Dungeon Heart, to stop this Madness you need to Conquer the Castle!")

SET_GAME_RULE(AlliesShareVision,1)
SET_GAME_RULE(AlliesShareCta,1)
SET_TIMER(PLAYER_GOOD,TIMER0)

ALLY_PLAYERS(PLAYER0,PLAYER1,3)
ALLY_PLAYERS(PLAYER1,PLAYER0,3)

COMPUTER_PLAYER(PLAYER3,2)

ADD_CREATURE_TO_POOL(SORCEROR,20)
ADD_CREATURE_TO_POOL(ORC,20)
ADD_CREATURE_TO_POOL(BILE_DEMON,20)
ADD_CREATURE_TO_POOL(DRAGON,20)
ADD_CREATURE_TO_POOL(DARK_MISTRESS,20)

CREATURE_AVAILABLE(ALL_PLAYERS,SORCEROR,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,ORC,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,BILE_DEMON,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,DRAGON,1,0)
CREATURE_AVAILABLE(ALL_PLAYERS,DARK_MISTRESS,1,0)

ROOM_AVAILABLE(ALL_PLAYERS,TREASURE,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,LAIR,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,GARDEN,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,TRAINING,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,RESEARCH,1,1)
ROOM_AVAILABLE(ALL_PLAYERS,BRIDGE,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,GUARD_POST,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,WORKSHOP,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,PRISON,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,TORTURE,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,BARRACKS,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,TEMPLE,1,0)
ROOM_AVAILABLE(ALL_PLAYERS,SCAVENGER,1,0)

MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HAND,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SLAP,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_POSSESS,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_IMP,1,1)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_SPEED,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_OBEY,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CALL_TO_ARMS,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_CONCEAL,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_HEAL_CREATURE,1,0)
MAGIC_AVAILABLE(ALL_PLAYERS,POWER_PROTECT,1,0)

TRAP_AVAILABLE(ALL_PLAYERS,LIGHTNING,1,0)
TRAP_AVAILABLE(ALL_PLAYERS,WORD_OF_POWER,1,0)

DOOR_AVAILABLE(ALL_PLAYERS,MAGIC,1,0)

IF_CONTROLS(PLAYER3,IMP < 30)
  NEXT_COMMAND_REUSABLE
  MAGIC_AVAILABLE(PLAYER3,POWER_IMP,1,1)
 ENDIF

IF_CONTROLS(PLAYER3,IMP >= 30)
  NEXT_COMMAND_REUSABLE
  MAGIC_AVAILABLE(PLAYER3,POWER_IMP,0,0)
ENDIF

IF(PLAYER0,TOTAL_CREATURES >= 30)
	NEXT_COMMAND_REUSABLE
	KILL_CREATURE(PLAYER0,ANY_CREATURE,LEAST_EXPERIENCED,1)
	QUICK_INFORMATION(2,"Be Careful Keeper, an Old Curse occured once again,it will kill the Weakest Creature in your Army. So the best Way to outgo its Grip the best would be Staying below 30 Servants...")
ENDIF

IF(PLAYER1,TOTAL_CREATURES >= 30)
	NEXT_COMMAND_REUSABLE
	KILL_CREATURE(PLAYER1,ANY_CREATURE,LEAST_EXPERIENCED,1)
ENDIF

CREATE_PARTY(TUNNELER1)
	ADD_TO_PARTY(TUNNELER1,ARCHER,3,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER1,ARCHER,3,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER1,WIZARD,3,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER1,BARBARIAN,3,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER1,BARBARIAN,3,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER1,MONK,3,250,ATTACK_DUNGEON_HEART,0)

CREATE_PARTY(TUNNELER2)
	ADD_TO_PARTY(TUNNELER2,WITCH,5,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER2,ARCHER,5,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER2,GIANT,5,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER2,SAMURAI,5,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER2,THIEF,5,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER2,MONK,5,250,ATTACK_DUNGEON_HEART,0)


CREATE_PARTY(TUNNELER3)
	ADD_TO_PARTY(TUNNELER3,WITCH,7,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER3,SAMURAI,7,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER3,ARCHER,7,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER3,BILE_DEMON,7,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER3,ARCHER,7,250,ATTACK_DUNGEON_HEART,0)


CREATE_PARTY(TUNNELER4)
	ADD_TO_PARTY(TUNNELER4,WITCH,9,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER4,ARCHER,9,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER4,FAIRY,9,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER4,SAMURAI,9,250,ATTACK_DUNGEON_HEART,0)
	ADD_TO_PARTY(TUNNELER4,KNIGHT,9,250,ATTACK_DUNGEON_HEART,0)


CREATE_PARTY(ROOMDEFENDERS)
	ADD_TO_PARTY(ROOMDEFENDERS,KNIGHT,10,250,DEFEND_LOCATION,0)
	ADD_TO_PARTY(ROOMDEFENDERS,FAIRY,10,250,DEFEND_LOCATION,0)
	ADD_TO_PARTY(ROOMDEFENDERS,ARCHER,10,250,DEFEND_LOCATION,0)
	ADD_TO_PARTY(ROOMDEFENDERS,GIANT,10,250,DEFEND_LOCATION,0)
	ADD_TO_PARTY(ROOMDEFENDERS,SAMURAI,10,250,DEFEND_LOCATION,0)


CREATE_PARTY(LASTSTAND)
	ADD_TO_PARTY(LASTSTAND,BARBARIAN,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,BARBARIAN,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,DRUID,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,HORNY,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,HORNY,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,FAIRY,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,FAIRY,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,TIME_MAGE,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,TIME_MAGE,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,SAMURAI,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,SAMURAI,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,KNIGHT,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,KNIGHT,10,250,DEFEND_HEART,0)
	ADD_TO_PARTY(LASTSTAND,AVATAR,10,250,DEFEND_HEART,0)

SET_CREATURE_PROPERTY(AVATAR,LORD,1)

REM WAVES

IF(PLAYER_GOOD,TIMER0 >= 5000)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER1,-6,DUNGEON_HEART,0,2,2500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER1,-3,DUNGEON_HEART,1,2,2500)
	SET_TIMER(PLAYER_GOOD,TIMER1)
ENDIF

IF(PLAYER_GOOD,TIMER1 >= 4000)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER1,-5,DUNGEON_HEART,0,2,2500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER1,-2,DUNGEON_HEART,1,2,2500)
	SET_TIMER(PLAYER_GOOD,TIMER2)
ENDIF

IF(PLAYER_GOOD,TIMER2 >= 3500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER2,-7,DUNGEON_HEART,0,4,2500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER2,-4,DUNGEON_HEART,1,4,2500)
	SET_TIMER(PLAYER_GOOD,TIMER3)
ENDIF

IF(PLAYER_GOOD,TIMER3 >= 4000)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER2,-6,DUNGEON_HEART,0,4,2500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER2,-3,DUNGEON_HEART,1,4,2500)
	SET_TIMER(PLAYER_GOOD,TIMER4)
ENDIF

IF(PLAYER_GOOD,TIMER4 >= 4500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER3,-7,DUNGEON_HEART,0,6,2500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER3,-4,DUNGEON_HEART,1,6,2500)
	SET_TIMER(PLAYER_GOOD,TIMER5)
ENDIF

IF(PLAYER_GOOD,TIMER5 >= 3500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER3,-5,DUNGEON_HEART,0,6,2500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER3,-2,DUNGEON_HEART,1,6,2500)
	SET_TIMER(PLAYER_GOOD,TIMER6)
ENDIF



IF(PLAYER_GOOD,TIMER6 >= 5000)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER4,-5,DUNGEON_HEART,0,8,2500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER4,-2,DUNGEON_HEART,1,8,2500)
	SET_TIMER(PLAYER_GOOD,TIMER7)
ENDIF



IF(PLAYER_GOOD,TIMER7 >= 4500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER4,-5,DUNGEON_HEART,0,8,2500)
	ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER4,-2,DUNGEON_HEART,1,8,2500)
	SET_TIMER(PLAYER3,TIMER0)
	SET_TIMER(PLAYER3,TIMER1)
ENDIF

IF(PLAYER_GOOD,FLAG0 == 0)
	IF(PLAYER3,TIMER0 >= 4500)
		NEXT_COMMAND_REUSABLE
		ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER4,-5,DUNGEON_HEART,0,8,2500)
		NEXT_COMMAND_REUSABLE
		ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER4,-7,DUNGEON_HEART,0,8,2500)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER3,TIMER0)
	ENDIF
ENDIF

IF(PLAYER_GOOD,FLAG1 == 0)
	IF(PLAYER3,TIMER1 >= 4500)
		NEXT_COMMAND_REUSABLE
		ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER4,-2,DUNGEON_HEART,1,8,2500)
		NEXT_COMMAND_REUSABLE
		ADD_TUNNELLER_PARTY_TO_LEVEL(PLAYER_GOOD,TUNNELER4,-4,DUNGEON_HEART,1,8,2500)
		NEXT_COMMAND_REUSABLE
		SET_TIMER(PLAYER3,TIMER1)
	ENDIF
ENDIF

REM ACTION POINTS



IF_ACTION_POINT(9,ALL_PLAYERS)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,LASTSTAND,PLAYER_GOOD,1)
	SET_GAME_RULE(AlliesShareDrop,1)
ENDIF

IF_ACTION_POINT(1,PLAYER0)
	SET_FLAG(PLAYER_GOOD,FLAG0,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ROOMDEFENDERS,18,1)
ENDIF

IF_ACTION_POINT(3,PLAYER0)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ROOMDEFENDERS,19,1)
ENDIF

IF_ACTION_POINT(4,PLAYER0)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ROOMDEFENDERS,20,1)
ENDIF

IF_ACTION_POINT(12,PLAYER0)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ROOMDEFENDERS,13,1)
ENDIF



IF_ACTION_POINT(2,PLAYER1)
	SET_FLAG(PLAYER_GOOD,FLAG1,1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ROOMDEFENDERS,21,1)
ENDIF

IF_ACTION_POINT(5,PLAYER1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ROOMDEFENDERS,22,1)
ENDIF

IF_ACTION_POINT(6,PLAYER1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ROOMDEFENDERS,23,1)
ENDIF

IF_ACTION_POINT(10,PLAYER1)
	ADD_PARTY_TO_LEVEL(PLAYER_GOOD,ROOMDEFENDERS,11,1)
ENDIF


IF(PLAYER0,ALL_DUNGEONS_DESTROYED == 1)
	QUICK_OBJECTIVE(4,"You Guys worked great, for beginners...")
	WIN_GAME
ENDIF

IF(PLAYER1,DUNGEON_DESTROYED == 1)
	QUICK_OBJECTIVE(3,"GG EZ, for the enemies lol.")
	LOSE_GAME
ENDIF
